package xpn.platform.modules.sys.org;

import java.util.ArrayList;
import java.util.List;

/**
 * 组织机构服务。
 * <p>
 * <br>
 * {@link #findSendeeSelectOrgs}<br>
 * {@link #getSafeOrgListForRestConvert(List)}
 *
 * @author bobatkm Oct 19, 2017
 */
public interface SysOrgService {
    /**
     * 根据指定的角色条件和ou条件查找选人发送的机构列表。
     *
     * @param roleCondition ：角色条件。示例：公司领导 and 部门领导 or 绩效考核
     * @param ouLevel       ： ou层次。0待办O，1代表OU1，2代表OU2，以此类推。
     * @param ouType        ：ou类型。0代表和当前用户相同的ou；1代表和当前用户不同的ou
     * @return ： 符合条件的机构列表。
     */
    List<SysOrg> findSendeeSelectOrgs(String roleCondition, Integer ouLevel, Integer ouType,
                                      String starterId, String mySenderId, String specifiedUsersHref,
                                      String xpnTokenName, String token);

    /**
     * 获取对于Rest转换安全的机构列表
     *
     * @param orgList
     * @return
     */
    List<SysOrg> getSafeOrgListForRestConvert(List<SysOrg> orgList);

    /**
     * 获取指定机构org的指定机构层次level的机构
     *
     * @param org
     * @param level
     * @return
     */
    SysOrg getOUOrg(SysOrg org, int level);

    ArrayList<Long> getSelfAndChildIds(Long id, ArrayList<Long> ret);

    SysOrg getRelateOrgByType(Long orgId, int type);
}
